package com.sc.nft.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.CatenaInfo;
import com.sc.nft.entity.DigitalCollectionProductInfoSubscribe;
import com.sc.nft.entity.UserInfo;
import com.sc.nft.entity.dto.ConfirmExchangeSubscribeDTO;
import com.sc.nft.entity.vo.*;
import com.sc.nft.entity.vo.salvageEvents.SalvageProductPageVO;
import com.sc.nft.enums.NFTProductShowSalvagePrefectureEnum;
import java.util.List;
import java.util.Set;

public interface NftMallService {
    /**
     * 分页条件查询商城列表
     * @param catenaId
     * @param count
     * @param num
     * @param time
     * @param typeClassify
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<DigitalCollectionProductVO> getMallPageList(Long catenaId, String count, String num, String time, Integer typeClassify, Integer pageNo, Integer pageSize,String appStoreVersion);

    /**
     * 获取商品详情
     * @param productId
     * @return
     */
    ProductDetailsVO getProductDetails(Long productId,String appStoreVersion) ;

    /**
     * 获取申购商品详情
     * @param productId
     * @return
     */
    SubscribeProductDetailsVO getSubscribeProductDetails(Long productId, String appStoreVersion);

    /**
     * 获取拍卖数字藏品详情
     * @param productId
     * @param appStoreVersion
     * @return
     */
    AuctionProductDetailsVO getAuctionProductDetails(Long productId, String appStoreVersion);

    /**
     * 获取盲盒详情
     * @param productId
     * @return
     */
    BlindBoxDetailsVO getBlindBoxDetails(Long productId,String appStoreVersion) ;

    /**
     * 获取盲盒抽奖详情
     * @param productId
     * @param appStoreVersion
     * @return
     */
    BlindBoxDetailsVO getAllBlindBoxDetails(Long productId,String appStoreVersion) ;

    /**
     * 搜索商品/盲盒
     * @param firstTitle
     * @return
     */
    Page<DigitalCollectionProductVO> searchProductList(String firstTitle,Integer typeClassify,Integer pageNo,Integer pageSize,String appStoreVersion);

    /**
     * 获取系列列表
     * @param type
     * @return
     */
    List<CatenaInfo> getCatenaListByType(Integer type);

    /**
     * 分页获取分解商品列表
     * @return
     */
    Page<SalvageProductPageVO> getSalvageProductPage(NFTProductShowSalvagePrefectureEnum showSalvagePrefecture,Integer pageNo, Integer pageSize);

    /**
     * 获取分解商品详情
     * @param productId
     * @return
     */
    ProductDetailsVO getSalvageProductDetails(Long productId,String appStoreVersion);

    /**
     * 申购兑换
     * @param confirmExchangeSubscribeDTO
     */
    void confirmExchangeSubscribe(ConfirmExchangeSubscribeDTO confirmExchangeSubscribeDTO);


    /**
     * 执行申购兑换
     * @param requireEquityPropsStock
     * @param digitalCollectionProductInfoSubscribe
     * @param user
     * @param subscribeCodes
     * @param productId
     */
    void doConfirmExchangeSubscribe(Integer requireEquityPropsStock,
                                    DigitalCollectionProductInfoSubscribe digitalCollectionProductInfoSubscribe,
                                    UserInfo user,
                                    Set<String> subscribeCodes,
                                    Long productId);

    /**
     * 中签申购码列表
     * @param page
     * @param productId
     * @return
     */
    Page<MySubscribeCodesWinDataVo> getSubscribeWin(Page page, Long productId);

}
